﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using KandieWebProjectI.BLL.Controller;

namespace KandieWebProjectI.UI.Forms.ProdutoPages
{
    public partial class Produto : System.Web.UI.Page
    {
        private ProdutoBLL _produtoBll;
        private Domain.Model.Produto _produto;
        private bool _errorStatus = false;
        private IList<Domain.Model.Produto> _listProduto;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
            }
            else
            {
                if (Session["statusError"] != null)
                {
                    bool statusError = (bool)Session["statusError"];
                    if (statusError)
                    {
                        ClientScript.RegisterClientScriptBlock(typeof(Page), "GravacaoErro",
                            "<script language='javascript'>alert('Ocorreu um erro durante a gravação!')</script>");
                    }
                    else
                    {
                        ClientScript.RegisterClientScriptBlock(typeof(Page), "GravacaoOK",
                            "<script language='javascript'>alert('Gravação realizada com sucesso!')</script>");
                    }
                    Session["statusError"] = null;
                }
                BindDataToGridView();
            }
        }

        protected void Editar(object sender, GridViewSelectEventArgs e)
        {
            int index = e.NewSelectedIndex;
            string target = GetIdFromGridView(index);
            string redirect = "ProdutoEditar.aspx?";
            redirect += "&target=" + target;
            Response.Redirect(redirect);
        }

        protected void Deletar(object sender, GridViewDeleteEventArgs e)
        {
            int index = e.RowIndex;
            string pk = GetIdFromGridView(index);

            _produto = new Domain.Model.Produto()
                           {
                               Id = Convert.ToInt32(pk)
                           };

            _produtoBll = new ProdutoBLL();
            _errorStatus = _produtoBll.Deletar(_produto.Id);

            Session["statusError"] = _errorStatus;
            Session["action"] = "Exclusão realizada com sucesso!";

            //this.Page.ClientScript.RegisterStartupScript(this.GetType(), "OpenModal", "window.open('" + ResolveUrl("~/Forms/ProdutoPages/ConfirmationPage.aspx") + "', 'Confirmação',' width=200, height=200')", true);
            Response.Redirect("~/Forms/ProdutoPages/ConfirmationPage.aspx");

        }

        // Adiciona para o elemento deletar dentro do GridView a mensagem de confirmação 
        // no evento "OnClientClick"
        protected void RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow) {
                LinkButton delButton = (LinkButton)e.Row.Cells[4].Controls[0];
                delButton.OnClientClick = string.Format("return confirm('Deseja realmente excluir este produto?');");
            }
        }

        protected void BindDataToGridView()
        {
            _produtoBll = new ProdutoBLL();

            _listProduto = _produtoBll.RetornaTodos();
            if (_listProduto.Count > 0)
            {
                gridProdutos.DataSource = _listProduto;
            }
            else {
                gridProdutos.DataSource = null;
            }
            gridProdutos.DataBind();
        }

        protected void GridViewPageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gridProdutos.PageIndex = e.NewPageIndex;
            BindDataToGridView();
        }

        protected string GetIdFromGridView(int index)
        {
            return this.gridProdutos.Rows[index].Cells[0].Text;;
        }
    }
}